Fixed issue #98 and added tests
authorJeroen van der Heijden <jeroen@transceptor.technology>
Mon, 18 Jun 2018 06:33:52 +0000 (08:33 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Mon, 18 Jun 2018 06:33:52 +0000 (08:33 +0200)
src/cexpr/cexpr.c
src/siri/db/aggregate.c
test/test_select.py

index c1ab78a8778df0682fb78553a9e4a7f46a09e771..89915f3513e54235df61fdb3b2f15aa35f0d2e51 100644 (file)
@@ -266,8 +266,8 @@ int cexpr_run(cexpr_t * cexpr, cexpr_cb_t cb, void * obj)
                     cb(obj, cexpr->via_b.cond));
     default:
         log_critical("operator must be AND or OR, got: %d", cexpr->operator);
-        assert (0);
     }
+    assert (0);
     return -1; /* this should NEVER happen */
 }
 
index 08c3006990d70a9b2533e1defc13bd24cbfcd477..898c0541899b3063168cccb905e79026996dc9cd 100644 (file)
@@ -641,6 +641,12 @@ static siridb_points_t * AGGREGATE_derivative(
         siridb_aggr_t * aggr,
         char * err_msg)
 {
+    if (source->tp == TP_STRING)
+    {
+        sprintf(err_msg, "Cannot use derivative() on string type.");
+        return NULL;
+    }
+
     size_t len = source->len - 1;
     siridb_points_t * points = siridb_points_new(len, TP_DOUBLE);
 
@@ -698,6 +704,12 @@ static siridb_points_t * AGGREGATE_difference(
         siridb_points_t * source,
         char * err_msg)
 {
+    if (source->tp == TP_STRING)
+    {
+        sprintf(err_msg, "Cannot use difference() on string type.");
+        return NULL;
+    }
+
     size_t len = source->len - 1;
     siridb_points_t * points = siridb_points_new(len, source->tp);
 
@@ -1096,7 +1108,7 @@ static int aggr_derivative(
 
     if (points->tp == TP_STRING)
     {
-        sprintf(err_msg, "Cannot use difference() on string type.");
+        sprintf(err_msg, "Cannot use derivative() on string type.");
         return -1;
     }
 
index 2f7e68222bb7e8abb85eeef90b7b6e2570d27ebb..2ed866db90f81ad8d7da4a23bd83601039dfd3ff 100644 (file)
@@ -344,6 +344,21 @@ class TestSelect(TestBase):
                 'select * from "aggr" '
                 'merge as "t" using filter("0")')
 
+        with self.assertRaisesRegexp(
+                QueryError,
+                'Cannot use difference\(\) on string type\.'):
+            await self.client0.query('select difference() from "log"')
+
+        with self.assertRaisesRegexp(
+                QueryError,
+                'Cannot use derivative\(\) on string type\.'):
+            await self.client0.query('select derivative(6, 3) from "log"')
+
+        with self.assertRaisesRegexp(
+                QueryError,
+                'Cannot use derivative\(\) on string type\.'):
+            await self.client0.query('select derivative() from "log"')
+
         with self.assertRaisesRegexp(
                 QueryError,
                 'Overflow detected while using sum\(\)\.'):
@@ -443,7 +458,6 @@ class TestSelect(TestBase):
         await self.client0.query(
             'alter database set select_points_limit 1000000')
 
-
         self.client0.close()
 
         return False